Tema 4 Estructuras de Control Iterativas
Estructuras iterativas Repiten  n  veces la ejecución de un bloque de instrucciones n  finito o infinito n  conocido o desconocido a priori
Iteraciones en c Sentencia  while Sentencia  do-while Sentencia  for
Sentencia   while while ( condición ) {  bloque_instrucciones; } ¿condición? V F Bloque de instrucciones
S emántica de   while while : (0-n veces) Evaluar la condición Si el resultado es falso, acabar el bucle (seguir con la instrucción siguiente al  while ) Si el resultado es verdadero, ejecutar el bloque de instrucciones completo y volver a empezar
Escribir la tabla de multiplicar del 8. int mult = 1;  while (mult <= 10)   { printf (“\n%d x %d = %d”, 8, mult, 8*mult); mult = mult +1;  } Ejemplo
Ejemplo
Iteraciones en c Sentencia  while Sentencia  do-while Sentencia  for
Sentencia   do-while do {  bloque_instrucciones; }while ( condición ); ¿condición? V F Bloque de instrucciones
S emántica de   do- while do while : (1-n veces) Ejecutar el bloque de instrucciones complet o Evaluar la condición Si el resultado es falso, acabar el bucle (seguir con la instrucción siguiente al  do-while ) Si el resultado es verdadero, volver a empezar
Ejemplo Leer un número comprendido entre 1 y 100 int num;  do   { printf (“\nEscribe un valor entre 1 y 100: ”); scanf(“%d”, &num); } while (num < 1 || num >100);
Ejemplo
Diseño  de la iteración Control de la iteración ¿Cuándo acaba la iteración? (condición de salida) ¿Cómo inicializar la condición? ¿Cómo se actualiza la condición?
Diseño  de la iteración Control de la iteración Proceso de la iteración ¿Qué es lo que hay que repetir? ¿Cómo inicializarlo? ¿Cuál es el estado al final del bucle?
Diseño  de la iteración Control de la iteración Proceso de la iteración Comprobación del diseño a través de trazas
Ejemplo resuelto Leer un valor  a  y escribir su tabla de multiplicar. Se usará un contador  b  que tomará valores de 1 a 10 para multiplicar al valor de  a .
Control de la iteración ¿Cuándo acaba la iteración? (condición de salida) Cuando  b  valga 11 ¿Cómo inicializar la condición? Al principio  b  valdrá 1 ¿Cómo se actualiza la condición? En cada iteración  b  se incrementará en 1
Proceso de la iteración ¿Qué es lo que hay que repetir? Mostrar  el valor  a * b  y saltar de línea ¿Cómo inicializarlo? No hace falta ¿Cuál es el estado al final del bucle? Se habrá mostrado la tabla de multiplicar de  a
Algoritmo Inicialización Control Proceso INICIO LEER ( a ) b =1 b <=10 ESCRIBIR  a * b Saltar de línea b = b +1 V F FIN
Código void main() { int a,b,c; printf(“\n Introduce un número: ”);  scanf(“%d”,&a); b=1;  while  (b  <= 10 ) { c=a*b;   printf (“ %d x %d es = %d \n”,a,b,c); b=b+1;  } system(“pause”); }
Comprobación (trazas) 20 5 4 16 4 4 24 6 4 8 2 4 12 3 4 4 1 4 .. .. .. 10 b 40 4 c a
Ejemplo/ ejercicio 1 Implementar una eurocalculadora Dependiendo de la opción ‘P’ o ‘E’ convertirá de euros a pesetas o viceversa Tras cada conversión el programa preguntará si se va a realizar otro cálculo
Algoritmo (con do-while) F Calcular  num  en pesetas Escribir resultado en pesetas ¿Qué deseas (P/E)?    opc ¿ opc  == ‘P’? V ¿Qué número?   num Calcular  num  en euros Escribir resultado en euros ¿Más números (S/N)?   resp ¿ resp  == ‘S’? V F FIN
Algoritmo (con  while ) resp=‘S’ Calcular  num  en pesetas Escribir resultado en pesetas ¿Más números (S/N)?   resp F ¿ opc  == ‘P’? V Calcular  num  en euros Escribir resultado en euros ¿Qué deseas (P/E)?    opc ¿Qué número?   num ¿ resp  == ‘S’? V F FIN
Ejemplo/ ejercicio 2 Calcular la primera potencia de 2 que sea mayor o igual que un número dado Leer  Numero ¿Potencia< Numero ? Escribir Potencia V F Potencia = 1 Potencia = Potencia * 2
Código (con  while ) /*  numero > 1  */ { potencia=1;  /*  2 0  = 1  */ while  (p otencia < numero ) {   potencia = potencia*2; } printf ( “La p otencia buscada es %d” , potencia ); }
Ejemplo/ ejercicio 3 Contar los caracteres introducidos por teclado hasta encontrar un punto (que también se cuenta) Leer  car  (un carácter) ¿ car  !=‘.’? Escribir num V F num = 1 num = num +1 Leer  car
Código (con  while ) { n um=1 ; scanf ( “%c”, & car) ; while   ( car  !=  ‘.’ )  { n um=  n um+1 ; scanf ( “%c”, & car) ;   } printf ( “ Número total de caracteres:  %d” ,  n um); }
Código (con  do-while ) { n um=0; do { n um= num +1 ; scanf ( “%c”, & car) ; } while   ( car  !=  ‘.’ ) ; printf ( “ Número total de caracteres:  %d” ,  n um); }
Ejercicios Imprimir los números del 1 al 10 cinco veces Mostrar las tablas de multiplicar del 1 al 9 Mostrar los múltiplos de 6 del 0 al 10000 Mismo ejercicio, pero de 10 en 10, es decir, cada 10 números mostrados, pedir que se pulse una tecla para continuar Pedir 2 números y escribir todos los enteros que hay entre ambos Pedir un valor  n  e imprimir las  n  primeras potencias de  n
Iteraciones en c Sentencia  while Sentencia  do-while Sentencia  for
Sentencia   for for ( inicialización ;  condición ;  actualización ) {  bloque_instrucciones; } ¿condición? V F Bloque de instrucciones Inicialización Actualización
Semántica  de   for for : (número de veces conocido a priori) Ejecutar la inicialización Evaluar la condición Si el resultado es falso, acabar el bucle (seguir con la instrucción siguiente al  for ) Si el resultado es verdadero, ejecutar el bloque de instrucciones completo y ejecutar la actualización
Equivalencia  for  -  while inicialización; while ( condición ) { bloque_instrucciones; actualización: } for ( inicialización ;  condición;   actualización ) { bloque_instrucciones; }
Ejemplo Mostrar en pantalla los primeros  n  números pares scanf (“%d”, &n) i=1; while (i<=n) { printf(“\n %d”, 2*i); i= i+1; } scanf (“%d”, &n) for (i=1;  i<=n;  i= i+1) { printf(“\n %d”, 2*i); }
Estructuras  iterativas ¿Cuando utilizar una u otra? for  cuando el número de iteraciones sea conocido do while  cuando la iteración se ejecute como mínimo una vez while  en el resto de casos
Ejercicios
Ejercicio  factorial Pedir un número y mostrar por pantalla su factorial Propuesta: comprobar que el número es positivo, y pedirlo cuantas veces haga falta mientras no lo sea
while Leer el número     num ¿ num  == 0? fact = 1 Escribir resultado ¿ num  <0? No se puede Calcular  num ! fact = 1 i = 1 ¿ i  <=  num ? fact = fact * i i = i + 1 Escribir fact V V V F F F
for for (i=1;i<=num;i=i+1) {fact=fact*i;} Leer el número     num ¿ num  == 0? fact = 1 Escribir resultado ¿ num  <0? No se puede calcular  num ! fact = 1; Repetir desde que i vale 1 hasta que i valga  num , i=i+1; fact = fact * i; Escribir fact SI SI NO NO
Más ejercicios Pedir 2 números positivos y calcular su Máximo Común Divisor y su mínimo común múltiplo Calcular el mínimo, el máximo y la media de una serie de números enteros que termina en 0 Propuesta: ídem pero considerando sólo los positivos Pedir  n  y  m  y calcular el valor

Tema 4 iterativas

  • 1.
    Tema 4 Estructurasde Control Iterativas
  • 2.
    Estructuras iterativas Repiten n veces la ejecución de un bloque de instrucciones n finito o infinito n conocido o desconocido a priori
  • 3.
    Iteraciones en cSentencia while Sentencia do-while Sentencia for
  • 4.
    Sentencia while while ( condición ) { bloque_instrucciones; } ¿condición? V F Bloque de instrucciones
  • 5.
    S emántica de while while : (0-n veces) Evaluar la condición Si el resultado es falso, acabar el bucle (seguir con la instrucción siguiente al while ) Si el resultado es verdadero, ejecutar el bloque de instrucciones completo y volver a empezar
  • 6.
    Escribir la tablade multiplicar del 8. int mult = 1; while (mult <= 10) { printf (“\n%d x %d = %d”, 8, mult, 8*mult); mult = mult +1; } Ejemplo
  • 7.
  • 8.
    Iteraciones en cSentencia while Sentencia do-while Sentencia for
  • 9.
    Sentencia do-while do { bloque_instrucciones; }while ( condición ); ¿condición? V F Bloque de instrucciones
  • 10.
    S emántica de do- while do while : (1-n veces) Ejecutar el bloque de instrucciones complet o Evaluar la condición Si el resultado es falso, acabar el bucle (seguir con la instrucción siguiente al do-while ) Si el resultado es verdadero, volver a empezar
  • 11.
    Ejemplo Leer unnúmero comprendido entre 1 y 100 int num; do { printf (“\nEscribe un valor entre 1 y 100: ”); scanf(“%d”, &num); } while (num < 1 || num >100);
  • 12.
  • 13.
    Diseño dela iteración Control de la iteración ¿Cuándo acaba la iteración? (condición de salida) ¿Cómo inicializar la condición? ¿Cómo se actualiza la condición?
  • 14.
    Diseño dela iteración Control de la iteración Proceso de la iteración ¿Qué es lo que hay que repetir? ¿Cómo inicializarlo? ¿Cuál es el estado al final del bucle?
  • 15.
    Diseño dela iteración Control de la iteración Proceso de la iteración Comprobación del diseño a través de trazas
  • 16.
    Ejemplo resuelto Leerun valor a y escribir su tabla de multiplicar. Se usará un contador b que tomará valores de 1 a 10 para multiplicar al valor de a .
  • 17.
    Control de laiteración ¿Cuándo acaba la iteración? (condición de salida) Cuando b valga 11 ¿Cómo inicializar la condición? Al principio b valdrá 1 ¿Cómo se actualiza la condición? En cada iteración b se incrementará en 1
  • 18.
    Proceso de laiteración ¿Qué es lo que hay que repetir? Mostrar el valor a * b y saltar de línea ¿Cómo inicializarlo? No hace falta ¿Cuál es el estado al final del bucle? Se habrá mostrado la tabla de multiplicar de a
  • 19.
    Algoritmo Inicialización ControlProceso INICIO LEER ( a ) b =1 b <=10 ESCRIBIR a * b Saltar de línea b = b +1 V F FIN
  • 20.
    Código void main(){ int a,b,c; printf(“\n Introduce un número: ”); scanf(“%d”,&a); b=1; while (b <= 10 ) { c=a*b; printf (“ %d x %d es = %d \n”,a,b,c); b=b+1; } system(“pause”); }
  • 21.
    Comprobación (trazas) 205 4 16 4 4 24 6 4 8 2 4 12 3 4 4 1 4 .. .. .. 10 b 40 4 c a
  • 22.
    Ejemplo/ ejercicio 1Implementar una eurocalculadora Dependiendo de la opción ‘P’ o ‘E’ convertirá de euros a pesetas o viceversa Tras cada conversión el programa preguntará si se va a realizar otro cálculo
  • 23.
    Algoritmo (con do-while)F Calcular num en pesetas Escribir resultado en pesetas ¿Qué deseas (P/E)?  opc ¿ opc == ‘P’? V ¿Qué número?  num Calcular num en euros Escribir resultado en euros ¿Más números (S/N)?  resp ¿ resp == ‘S’? V F FIN
  • 24.
    Algoritmo (con while ) resp=‘S’ Calcular num en pesetas Escribir resultado en pesetas ¿Más números (S/N)?  resp F ¿ opc == ‘P’? V Calcular num en euros Escribir resultado en euros ¿Qué deseas (P/E)?  opc ¿Qué número?  num ¿ resp == ‘S’? V F FIN
  • 25.
    Ejemplo/ ejercicio 2Calcular la primera potencia de 2 que sea mayor o igual que un número dado Leer Numero ¿Potencia< Numero ? Escribir Potencia V F Potencia = 1 Potencia = Potencia * 2
  • 26.
    Código (con while ) /* numero > 1 */ { potencia=1; /* 2 0 = 1 */ while (p otencia < numero ) { potencia = potencia*2; } printf ( “La p otencia buscada es %d” , potencia ); }
  • 27.
    Ejemplo/ ejercicio 3Contar los caracteres introducidos por teclado hasta encontrar un punto (que también se cuenta) Leer car (un carácter) ¿ car !=‘.’? Escribir num V F num = 1 num = num +1 Leer car
  • 28.
    Código (con while ) { n um=1 ; scanf ( “%c”, & car) ; while ( car != ‘.’ ) { n um= n um+1 ; scanf ( “%c”, & car) ; } printf ( “ Número total de caracteres: %d” , n um); }
  • 29.
    Código (con do-while ) { n um=0; do { n um= num +1 ; scanf ( “%c”, & car) ; } while ( car != ‘.’ ) ; printf ( “ Número total de caracteres: %d” , n um); }
  • 30.
    Ejercicios Imprimir losnúmeros del 1 al 10 cinco veces Mostrar las tablas de multiplicar del 1 al 9 Mostrar los múltiplos de 6 del 0 al 10000 Mismo ejercicio, pero de 10 en 10, es decir, cada 10 números mostrados, pedir que se pulse una tecla para continuar Pedir 2 números y escribir todos los enteros que hay entre ambos Pedir un valor n e imprimir las n primeras potencias de n
  • 31.
    Iteraciones en cSentencia while Sentencia do-while Sentencia for
  • 32.
    Sentencia for for ( inicialización ; condición ; actualización ) { bloque_instrucciones; } ¿condición? V F Bloque de instrucciones Inicialización Actualización
  • 33.
    Semántica de for for : (número de veces conocido a priori) Ejecutar la inicialización Evaluar la condición Si el resultado es falso, acabar el bucle (seguir con la instrucción siguiente al for ) Si el resultado es verdadero, ejecutar el bloque de instrucciones completo y ejecutar la actualización
  • 34.
    Equivalencia for - while inicialización; while ( condición ) { bloque_instrucciones; actualización: } for ( inicialización ; condición; actualización ) { bloque_instrucciones; }
  • 35.
    Ejemplo Mostrar enpantalla los primeros n números pares scanf (“%d”, &n) i=1; while (i<=n) { printf(“\n %d”, 2*i); i= i+1; } scanf (“%d”, &n) for (i=1; i<=n; i= i+1) { printf(“\n %d”, 2*i); }
  • 36.
    Estructuras iterativas¿Cuando utilizar una u otra? for cuando el número de iteraciones sea conocido do while cuando la iteración se ejecute como mínimo una vez while en el resto de casos
  • 37.
  • 38.
    Ejercicio factorialPedir un número y mostrar por pantalla su factorial Propuesta: comprobar que el número es positivo, y pedirlo cuantas veces haga falta mientras no lo sea
  • 39.
    while Leer elnúmero  num ¿ num == 0? fact = 1 Escribir resultado ¿ num <0? No se puede Calcular num ! fact = 1 i = 1 ¿ i <= num ? fact = fact * i i = i + 1 Escribir fact V V V F F F
  • 40.
    for for (i=1;i<=num;i=i+1){fact=fact*i;} Leer el número  num ¿ num == 0? fact = 1 Escribir resultado ¿ num <0? No se puede calcular num ! fact = 1; Repetir desde que i vale 1 hasta que i valga num , i=i+1; fact = fact * i; Escribir fact SI SI NO NO
  • 41.
    Más ejercicios Pedir2 números positivos y calcular su Máximo Común Divisor y su mínimo común múltiplo Calcular el mínimo, el máximo y la media de una serie de números enteros que termina en 0 Propuesta: ídem pero considerando sólo los positivos Pedir n y m y calcular el valor